﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;

public partial class p_Doma : System.Web.UI.Page
{   
    ///<summary>
    /// <para>
    ///     Vo Page_Load funkcijata se proveruva dali e dozvolen pristapot kon istata i dokolku e, se ispolnuvaat
    ///     soodvetnite label kontroli.
    /// </para>
    ///</summary>
    ///<param name="sender"></param>
    ///<param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
        //Proverka dali e dozvolen pristap do tekovnata strana
        //Dokolku ne e, korisnikot se prenesuva kon soodvetnata strana
        if ((int)Session["tip"] != 2) Response.Redirect("NO.aspx");
        else Session["strana"] = Request.RawUrl.ToString();
        
        if (!IsPostBack)
        {
            //Postavuvanje vrednostite na kontrolite za prikaz na imeto i dodatnite informacii na tekovniot korisnik
            lblIme.Text = "Име: " + Session["ime"].ToString();
            lblPrezime.Text = "Презиме: " + Session["prezime"].ToString();
            
        }
        IspolniPoraki();
        
    }

    /// <summary>
    ///     <para>
    ///         Se pristapuva do tabelata Poraki od bazata na podatoci, od kade se zemaat site poraki koi se napisani.
    ///         Dobienata tabela se koristi za ispolnuvanje na oddelni labeli za sekoja poraka posebno.
    ///         Dokolku vo tabelata Poraki od bazata ima 30 vneseni poraki, se brise najstarata i potoa se dodava novata poraka.
    ///         Funkcijata najcesto se povikuva za dodavanje na nova poraka vo shoutbox-ot i na PageLoad().
    ///     </para>
    /// </summary>
    protected void IspolniPoraki()
    {
        //Kreiranje na konekcija kon bazata
        SqlConnection konekcija = new SqlConnection();
        konekcija.ConnectionString = ConfigurationManager.ConnectionStrings["mojaKonekcija"].ConnectionString;

        //Kreiranje na 2 SQL query-a
        
        //SQL komanda za prebrojuvanje na brojot na poraki
        SqlCommand komanda = new SqlCommand();

        //SQL komanda koja ja brise najstarata poraka. Se povikuva samo ako vkupniot broj na poraki e ?????????????pogolem????????? od 30
        SqlCommand komanda2 = new SqlCommand();
        komanda.Connection = konekcija;
        komanda2.Connection = konekcija;
        komanda.CommandText = "SELECT Count(*) as count FROM Poraka";
        komanda2.CommandText = "DELETE TOP (1) FROM Poraka";
        try
        {
            konekcija.Open();
            SqlDataReader citac = komanda.ExecuteReader();

            //Brojac za poraki vo tabelata
            int brojNaPoraki = 0;
            while (citac.Read())
            {
                brojNaPoraki = (int)citac["count"];         
            }
            citac.Close();

            //Se vrsi proverka za toa kolku poraki ima vo tabelata
            // i dokolku ima nad 30 se brise najstarata poraka.
            if (brojNaPoraki == 30) komanda2.ExecuteNonQuery();

            //Se kreira novo SQL query so koe se polni listata od poraki.
            komanda.CommandText = "SELECT p.poraka,k.Ime, k.Prezime, p.data FROM Poraka as p, Korisnici as k WHERE k.KorIme=p.prof ORDER BY p.p_sifra desc";
            citac = komanda.ExecuteReader();
            while (citac.Read())
            {
                Label NovaPoraka = new Label();
                NovaPoraka.Text = "<div id='data'>"+citac["data"].ToString()+"</div><br/><h4>" + citac["poraka"].ToString() + "</h4><br/><div id='kopcule' style='padding:0px 50px;'><h3>" + citac["Ime"].ToString() + " " + citac["Prezime"].ToString() + "</h3></div><br/>";
                pnlPoraki.Controls.Add(NovaPoraka);
            }
            citac.Close();
        }
        catch (Exception er) { }
        finally
        {
            //Zatvoranje na konekcijata kon bazata.
            konekcija.Close();
        }
    }

    /// <summary>
    ///     <para>
    ///         Event handler koj se povikuva pri kliknuvanje na kopceto za dodavanje na poraka vo shoutboxot.
    ///     </para>
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnPoraka_Click(object sender, EventArgs e)
    {
        //Kreiranje konekcija kon bazata.
        SqlConnection konekcija = new SqlConnection();
        konekcija.ConnectionString = ConfigurationManager.ConnectionStrings["mojaKonekcija"].ConnectionString;

        //Kreiranje na SQL query
        SqlCommand komanda = new SqlCommand();
        komanda.Connection = konekcija;
        komanda.CommandText = "INSERT INTO Poraka (prof,poraka,data) VALUES(@p_sifra, @poraka,@data)";
        komanda.Parameters.AddWithValue("@p_sifra", Session["korisnicko"].ToString());
        komanda.Parameters.AddWithValue("@poraka", txtPoraka.Text);
        komanda.Parameters.AddWithValue("@data", DateTime.Now);
        try
        {
            konekcija.Open();
            komanda.ExecuteNonQuery();
        }
        catch (Exception er) { }
        finally
        {
            //Zatvoranje na konekcijata kon bazata.
            konekcija.Close();
            DodadiPoraka(txtPoraka.Text);
        }
    }

    /// <summary>
    ///     <para>
    ///         Funkcija koja go dodava stringot koj i se prakja kako vlezen argument vo labela. 
    ///         Potoa labelata se dodava najgore vo veke postoecka panela pnlPoraki koja vsusnost go pretstavuva shoutboxot.
    ///     </para>
    /// </summary>
    /// <param name="poraka"></param>
    protected void DodadiPoraka(string poraka)
    {
        Label NovaPoraka= new Label();

        //Se dodava porakata vo nova labela
        NovaPoraka.Text = "<div id='data'>"+DateTime.Now.ToString()+"</div><br/><h4>" + poraka + "</h4><br/><div id='kopcule' style='padding:0px 50px;'><h3>" + Session["ime"].ToString() + " " + Session["prezime"].ToString() +"</h3></div><br/>";
        pnlPoraki.Controls.AddAt(0, NovaPoraka);

        //Se prazni poleto vo text boxot.
        txtPoraka.Text = "";
    }
}